﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Utility;
using MsgCenter.Service.Helper;
using MsgCenter.Service.BLL;
using Utility.Model;
using Hxj.Data;

namespace MsgCenter.Service
{
    public class MsgService
    {
        internal static void SendSMS()
        {
            SendSMS(MsgBLLService.CreateDataService().GetMessageList("短信"));
        }

        private static void SendSMS(List<TB_SMS_Message> listMessage)
        {
            if (listMessage != null && listMessage.Count > 0)
            {
                foreach (TB_SMS_Message item in listMessage)
                {
                    if (item.AliTempletCode.IsNullOrEmpty())
                    {
                        SendOldSMS(item);
                    }
                    else
                    {
                        SendAliyunSMS(item);
                    }
                }
            }
        }

        private static void SendOldSMS(TB_SMS_Message messageModel)
        {
            string empty = string.Empty;
            if (messageModel.Mobile1.IsNullOrEmpty() && messageModel.Mobile2.IsNullOrEmpty())
            {
                MsgBLLService.CreateDataService().InsertMessageLog(messageModel, "发送失败，手机号为空");
            }
            else if (messageModel.Mobile1 == messageModel.Mobile2)
            {
                if (!messageModel.Mobile1.IsNullOrEmpty())
                {
                    if (messageModel.Messge.StartsWith("【"))
                    {
                        empty = AppConfigHelper.HttpRequestUrlData(string.Format(AppConfigHelper.strSendMobileURL, messageModel.Mobile1, messageModel.Messge));
                        MsgBLLService.CreateDataService().InsertMessageLog(messageModel, empty);
                    }
                    else
                    {
                        messageModel.Messge = AppConfigHelper.strSMS_SIGN + messageModel.Messge;
                        empty = AppConfigHelper.HttpRequestUrlData(string.Format(AppConfigHelper.strSendMobileURL, messageModel.Mobile1, messageModel.Messge));
                        MsgBLLService.CreateDataService().InsertMessageLog(messageModel, empty);
                    }
                }
                else
                {
                    MsgBLLService.CreateDataService().InsertMessageLog(messageModel, "发送失败，手机号为空");
                }
            }
            else
            {
                if (!messageModel.Mobile1.IsNullOrEmpty())
                {
                    if (messageModel.Messge.StartsWith("【"))
                    {
                        empty = AppConfigHelper.HttpRequestUrlData(string.Format(AppConfigHelper.strSendMobileURL, messageModel.Mobile1, messageModel.Messge));
                        MsgBLLService.CreateDataService().InsertMessageLog(messageModel, empty);
                    }
                    else
                    {
                        messageModel.Messge = AppConfigHelper.strSMS_SIGN + messageModel.Messge;
                        empty = AppConfigHelper.HttpRequestUrlData(string.Format(AppConfigHelper.strSendMobileURL, messageModel.Mobile1, messageModel.Messge));
                        MsgBLLService.CreateDataService().InsertMessageLog(messageModel, empty);
                    }
                }
                if (!messageModel.Mobile2.IsNullOrEmpty())
                {
                    if (messageModel.Messge.StartsWith("【"))
                    {
                        empty = AppConfigHelper.HttpRequestUrlData(string.Format(AppConfigHelper.strSendMobileURL, messageModel.Mobile2, messageModel.Messge));
                        messageModel.Mobile1 = messageModel.Mobile2;
                        MsgBLLService.CreateDataService().InsertMessageLog(messageModel, empty);
                    }
                    else
                    {
                        messageModel.Messge = AppConfigHelper.strSMS_SIGN + messageModel.Messge;
                        empty = AppConfigHelper.HttpRequestUrlData(string.Format(AppConfigHelper.strSendMobileURL, messageModel.Mobile2, messageModel.Messge));
                        messageModel.Mobile1 = messageModel.Mobile2;
                        MsgBLLService.CreateDataService().InsertMessageLog(messageModel, empty);
                    }
                }
            }
            MsgBLLService.CreateDataService().UpdateMessageStatus(messageModel.SMSID, 1);
        }

        private static void SendAliyunSMS(TB_SMS_Message messageModel)
        {
            string empty = string.Empty;
            if (messageModel.Mobile1.IsNullOrEmpty() && messageModel.Mobile2.IsNullOrEmpty())
            {
                MsgBLLService.CreateDataService().InsertMessageLog(messageModel, "发送失败，手机号为空");
            }
            else if (messageModel.Mobile1 == messageModel.Mobile2)
            {
                if (!messageModel.Mobile1.IsNullOrEmpty())
                {
                    empty = AliyunSmsHelper.sendSms(messageModel.Mobile1, messageModel.SendTempletMsg, messageModel.Messge, messageModel.AliTempletCode);
                    MsgBLLService.CreateDataService().InsertMessageLog(messageModel, empty);
                }
                else
                {
                    MsgBLLService.CreateDataService().InsertMessageLog(messageModel, "发送失败，手机号为空");
                }
            }
            else
            {
                if (!messageModel.Mobile1.IsNullOrEmpty())
                {
                    empty = AliyunSmsHelper.sendSms(messageModel.Mobile1, messageModel.SendTempletMsg, messageModel.Messge, messageModel.AliTempletCode);
                    MsgBLLService.CreateDataService().InsertMessageLog(messageModel, empty);
                }
                if (!messageModel.Mobile2.IsNullOrEmpty())
                {
                    empty = AliyunSmsHelper.sendSms(messageModel.Mobile2, messageModel.SendTempletMsg, messageModel.Messge, messageModel.AliTempletCode);
                    MsgBLLService.CreateDataService().InsertMessageLog(messageModel, empty);
                }
            }
            MsgBLLService.CreateDataService().UpdateMessageStatus(messageModel.SMSID, 1);
        }

        internal static void SendInstantSMS()
        {
            WhereClip wcp = new WhereClip();
            wcp = wcp.And(TB_SMS_Message._.Status == 0 && TB_SMS_Message._.IsInstant == 1 && TB_SMS_Message._.SendType == "短信");
            List<TB_SMS_Message> listMessage = MsgBLLService.CreateDataService().GetMessageList(wcp, new OrderByClip(TB_SMS_Message._.SendDate, OrderByOperater.DESC));
            SendSMS(listMessage);
        }
    }
}